package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.pojo.AssignPermissionsRequest;
import com.itheima.pojo.Result;
import com.itheima.pojo.RolePermission;
import com.itheima.service.EmproleService;
import com.itheima.service.RolePermissionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/rolePermission")
public class RolePermissionController {
    @Autowired
    private RolePermissionService rolePermissionService;

    // 分配权限
    @PutMapping("/role/assignPermissions")
    public Result updatePermissions(@RequestBody AssignPermissionsRequest request) {
        // 从请求参数对象中获取要分配权限的角色ID
        Integer roleId = request.getId();
        // 从请求参数对象中获取要分配给角色的权限ID列表
        List<Integer> permIds = request.getPermIds();

        // 创建LambdaQueryWrapper查询条件构建器，用于查询与指定角色ID关联的角色权限记录
        LambdaQueryWrapper<RolePermission> rolepermLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 设置查询条件，即角色ID等于传入的roleId
        rolepermLambdaQueryWrapper.eq(RolePermission::getRoleId, roleId);
        // 根据上述查询条件，调用rolePermissionService的remove方法，
        // 删除该角色原有的所有权限关联记录
        rolePermissionService.remove(rolepermLambdaQueryWrapper);

        // 创建一个ArrayList用于存储新的角色权限关联对象
        ArrayList<RolePermission> roleperms = new ArrayList<>();
        // 遍历要分配的权限ID列表
        for (Integer permId : permIds) {
            RolePermission roleperm = new RolePermission();
            // 设置该关联对象的角色ID
            roleperm.setRoleId(roleId);
            // 设置该关联对象的权限ID
            roleperm.setPermissionId(permId);
            roleperms.add(roleperm);
        }
        rolePermissionService.saveBatch(roleperms);

        return Result.success("权限分配成功");
    }
}
